//@author A0096723X
///@class CommonEnum
///@Description This class holds the public enumeration types of the BOT program.
///				CommonEnum handles the following operations
///				1. CALLER, which determines the caller type of a function, used in entries validation for setter functions
///				2. DISPLAY_FORMAT, which determines the HTML formatting of a string
///				3. COMMAND_TYPE, which determines the type of command passed in
///				4. SEARCH_TYPE, which determines the type of search command, used in EntriesManager and EntriesSorter.
///				5. struct ReturnCount, which contains the set of integers describing the entries in the list
///				6. struct ReturnString, a pair of string and display format, used as data between EntriesManager, Bot and GUI
///				7. struct ReturnStatus, containing a vector<vector<ReturnString>> and string of statusMessage, used as data between EntriesManager, Bot and GUI
#ifndef COMMONENUM_H
#define COMMONENUM_H
#include <string>
#include <fstream>
#include <qdatetime.h>
using namespace std;
class CommonEnum
{
public:
	enum CALLER{
		CALLER_ENTRIESMANAGER,
		CALLER_TOKENISER
	};
	enum DISPLAY_FORMAT{
		DISPLAY_FORMAT_DEFAULT,
		DISPLAY_FORMAT_NEW,
		DISPLAY_FORMAT_CLASH,
		DISPLAY_FORMAT_COMPLETED,
		DISPLAY_FORMAT_OVERDUE,
		DISPLAY_FORMAT_TODAY
	};
	
	enum COMMAND_TYPE{
		COMMAND_ADD,
		COMMAND_DELETE,
		COMMAND_SET_DONE,
		COMMAND_EDIT,
		COMMAND_DISPLAY,
		COMMAND_DISPLAY_ALL,
		COMMAND_SORT,
		COMMAND_SEARCH,
		COMMAND_UNDO,
		COMMAND_REDO,
		COMMAND_DISPLAY_TASK,
		COMMAND_DISPLAY_EVENT,
		COMMAND_DISPLAY_WEEK,
		COMMAND_DISPLAY_DAY,
		COMMAND_DISPLAY_DAY_BEFORE,
		COMMAND_CLEAR,
		COMMAND_DISPLAY_DONE,
		COMMAND_EXIT,
		COMMAND_INVALID
	};
	enum SEARCH_TYPE{
		SEARCH_TYPE_CUMULATIVE,
		SEARCH_TYPE_DEFAULT
	};
	struct ReturnCount{
		int numOverdue;
		int numToday;
		int numFuture;
		int numTasks;
		int numEvents;
	};
	
	struct ReturnString{
		pair<string,string> entry;
		DISPLAY_FORMAT format;
	};

	struct ReturnStatus{
		vector<vector<ReturnString>> displayMsg;
		string statusMsg;
	};	
	CommonEnum(void);
	~CommonEnum(void);
};
#endif
